"""
功能描述：执行test执行测试用例，生成测试报告

导包
查找所有测试用例生成测试报告‘
使用hemltestrunner运行测试用例
以写入方式打开
通过运行testruner运行测试套件，写入测试报告

自动清理报告
保留最新n个
获取报告路劲
获取路劲下所有的文件得到一个问价列表
遍历删除所有列表切片【：-3】

邮件

"""

# 导包
import time,os,unittest
from appium代码第一周.common.log import log1
from appium代码第一周.common.sendemail import sendemain
from appium代码第一周.common.driver import driver
from HTMLTestRunner import HTMLTestReportCN
from multiprocessing import Pool


def create_suite():
    # 查找所有测试用例生成测试报告‘
    start_dir=os.path.dirname(__file__)+'/testcase'
    suite=unittest.TestLoader().discover(start_dir,pattern='*test.py')
    return suite
    # 使用hemltestrunner运行测试用例
    # 以写入方式打开
    # 通过运行testruner运行测试套件，写入测试报告
#
# 自动清理报告  # 保留最新n个
def auto_clear():

    # 获取报告路劲
    name=os.path.dirname(__file__)+'/testreport/'
    # 获取报告路劲
    file_list=os.listdir(name)
    # 获取路劲下所有的文件得到一个问价列表
    file_list.sort(key=lambda  x:os.path.getctime(name+x))
    # 遍历删除所有列表切片【：-3】
    for i in file_list[:-3]:
        os.remove(name+i)

def run(x,y):
    driver.device_name=x
    driver.port=y
    auto_clear()
    suitte=create_suite()

#     创建带有时间戳的报告文件
    cur_time=time.strptime("%Y_%m_%d_%H_%M_%S")
    log1.info(f'获取到的测试淘金为{x},{y}')
    x=x.replace(':',"_")
    report =os.path.dirname(__file__)+'/testreport/'+cur_time+'+'+x+'_'+str(y)+'report.html'
    with open(report,'wb')as fp:
        runner =HTMLTestReportCN(stream=fp, verbosity=2,title='app测试报告',description='app测试结果')
        runner.run(suitte)

    while True:
        if os.path.exists(report):
            sendemain().sender(report)
            break


if __name__ == '__main__':
    serverList = [('127.0.0.1:21503', 4723), ('127.0.0.1:21513', 4725)]
    pool=Pool(len(serverList))
    re=[]
    for i,j in serverList:
        res=pool.apply_async(run,(i,j))    #阻塞，主进程，异步
        print(i)
        print(j)
        re.append(res)
    for i in re:
        i.get()
    print('打印完成')





#
# 邮件